home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / FPIC / FPIC.doc < prev    next >
Encoding:
Text File  |  1995-07-18  |  5.0 KB  |  188 lines

  1. ----------------------------------
  2.     密かな愉しみ・高速プログラミングの世界
  3. ----------------------------------
  4.     激速PICローダー    FPIC.r    v1.7
  5. ----------------------------------
  6.     by 鳳 幽玄
  7. ----------------------------------
  8. プログラムの高速化というテーマは、非常に奥の深い楽しいものであります。
  9.  
  10. FPIC.r は、そんな孤独な快楽を追い求めて作成された激速PICローダーです。
  11.  
  12. RAM・DISK上で実験してみたところ、取り込み画像などで、PIC.r v1.05 の
  13.  
  14. 2倍以上、HAPIC.r v1.30 の1.4倍以上の速度で描画できました。(平均)
  15.  
  16.             うそ
  17.  
  18. 看板に偽りあり。HAPIC.r はあらかじめ画面モードを設定しておけば、
  19.  
  20. もっと速い速度で描画できるようです。Mint上で実験したため
  21.  
  22. 気付きませんでした。関係者各位にご迷惑をおかけいたしましたことを
  23.  
  24. 切腹してお詫びするとともに、さらなる精進を心がけることを、ここに
  25.  
  26. 誓わせていただきます。(Mitsukyさん、報告どうも。)
  27.  
  28.  
  29. 実際のところ、純粋な展開速度を比較すると、
  30.  
  31. だいたい、目安として、百数十キロバイトを超える画像ファイルなら、
  32.  
  33. FPICの方が速く、それ以下のものならHAPIC.rの方が速いようです。
  34.  
  35. (FPIC.r は命令の512K展開をしないので、ベタの部分が多いと不利に
  36.  
  37. なります。)
  38.  
  39. ・・・ということのようです。
  40.  
  41. ----------------------------------
  42. このアーカイブに含まれている全ファイルは、著作者(鳳 幽玄)の許諾無しで
  43.  
  44. 好きに使っていただいて結構です。商用、部分抜きだしでの使用も可。
  45.  
  46. ----------------------------------
  47. 使い方:    FPIC.r <ファイル名>
  48.  
  49.         拡張子は「省略できません」
  50.  
  51. ----------------------------------
  52.     ○は、デバッグしたもの    ●は、仕様が変更、拡張されたもの
  53.  
  54. v1.0    ・original
  55.  
  56. v1.1    ○65536色データの場合に誤動作していた。
  57.     ○粗い絵の場合に誤動作していた
  58.  
  59. v1.2    ○サイズ512x512を超えると自動的に暴走していた。
  60.  
  61. v1.3    ●正方形モードのPICに対応した(MFGED format)
  62.     ●座標指定のあるPICに対応した(MFGED format)
  63.  
  64. v1.4    ●65535色表示だったのを65536色表示にした。微妙に遅くなった。
  65.  
  66. v1.5    ・ファイルサイズを小さくした。
  67.     ・v1.4で遅くなった程度は、速度を盛り返した。
  68.     ・緑の稲妻がちょっと奇麗になった。
  69.  
  70. v1.6    ○v1.5でエンバグ。画面の下段を塗りきらない場合があった。
  71.     ○テキスト表示をなぜかカットし、そのまま終了していた。
  72.     ○パレット定義をしてなかったかもしれない。
  73.     ・さらに5%の高速化。
  74.  
  75. v1.7    ・多少の高速化。
  76.  
  77. ----------------------------------
  78.     見かけ
  79.  
  80. ・あんまり実用的じゃない。スイッチも無いし、拡張子すら省略できない。
  81.  
  82. ・けど、ソース付きなので、こっちは、応用できるかも。
  83.  
  84. ・32768色モードのPICが読める。
  85.  
  86. ・65536色モードのPICが読める。
  87.  
  88. ・正方形表示ができる。
  89.  
  90. ・表示位置指定ができる。
  91.  
  92. ----------------------------------
  93.     技術的な特徴(ソースを読む時の参考にでもしてください)
  94.  
  95.  
  96. ・ファイルは一括読み込み。(ちょっと高速になる)
  97.  
  98.  
  99. ・高速なわりにはメモリを喰わない。
  100.  
  101.     プログラム・サイズ(10数Kバイト)
  102.     スタック1K程度(1K程度)
  103.     データ・サイズ
  104.  
  105.  これだけあれば、とりあえず動くはずです。
  106.  
  107.  あ、もちろん、VRAMなどの512K展開バッファも必要ですが。
  108.  
  109.  
  110. ・緑の稲妻が走る理由
  111.  
  112.     65536色モードでも32768色モードと同じだけのメモリで
  113.  
  114.     動作するように工夫しています。
  115.  
  116.     色の変化点で色コードを書き込むのは同じですが、それに
  117.  
  118.     続く連鎖に関しては、「どこから連鎖してきたか」の情報を
  119.  
  120.     書き込むようにしています。塗り込む時には、その情報を元に
  121.  
  122.     カラーコードを取得しています。
  123.  
  124.     (あ、どうやら、ICE.rでも似たようなことをしているらしい。
  125.  
  126.     ・・青い稲妻の方が奇麗。)
  127.  
  128. ・ビット単位のデータは、とりあえず、一括で扱う。
  129.  
  130.     これによって、それなりに高速になりました。
  131.  
  132.         連鎖データ編
  133.  
  134.     01_10_11_10    (左下・真下・右下・真下)
  135.  
  136.     普通は、こういうのを頭からビット単位でチェックして、
  137.  
  138.     「うむ。01だな。左下!」「次、10だから真下」・・・
  139.  
  140.     という風に、順番に読んで処理することになるのですが、
  141.  
  142.     それでは、ちょっとアレなので、1バイトごとに、これらのデータを
  143.  
  144.     読み取り、それに応じて256通りの処理ルーチンに振り分けることで
  145.  
  146.     一括処理を行うようにしてみました。つまり・・
  147.  
  148.     「うむ。01_10_00_10だなっ。左下、真下、右下、真下っ!」・・・
  149.  
  150.     これで、最大4つぶんの連鎖を一度に処理できるようになります。
  151.  
  152.     なお、それぞれの処理ルーチンは、Cで書いたプログラムで
  153.  
  154.     自動作成したものに少し手を加えて使っています(make_src.c)
  155.  
  156.     なお、読みすぎたビットは、Wyle符号解析部に受け渡すので
  157.  
  158.     無駄になりません。(なる場合もあるけど。)
  159.  
  160.  
  161.         変化点位置(Wyle符号)編
  162.  
  163.     これも、1バイト読み込みによる振り分けを行っています。
  164.  
  165.     とは言っても、数値1~6の範囲はビット単位で読んだ方が
  166.  
  167.     速そうだったので、そのようにしています。
  168.  
  169.     なお、これだと大きい数値の場合、バイト枠に入りきらなくなり、
  170.  
  171.     振り分けができまでんので、1が11個以上続いた場合は、普通に
  172.  
  173.     処理させています。まあ、数値が大きいってことは
  174.  
  175.     絵が粗いってことだと思うので、それほど速度が要求される
  176.  
  177.     部分ではないでしょう。
  178.  
  179.  
  180.         パレット編
  181.  
  182.     とりあえず、16ビット読み込みます。
  183.  
  184.     キャッシュヒットの場合は、8ビットが無駄になりますが、
  185.  
  186.     連鎖データに流用し、うまく誤魔化しています。
  187.  
  188.